Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Keyboard controller (computing)</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Keyboard_controller_(computing)"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Keyboard_controller_computing rootpage-Keyboard_controller_computing skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Keyboard controller (computing)</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable">For other uses, see <a href="Keyboard_controller_(disambiguation)" class="mw-redirect mw-disambig" title="Keyboard controller (disambiguation)">Keyboard controller</a>.</div>
<style data-mw-deduplicate="TemplateStyles:r1305433154">
/* start https://en.wikipedia.org/ */


.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}


/* end https://en.wikipedia.org/ */
</style>

<p>In computing, a <b>keyboard controller</b> is a device that interfaces a <a href="Keyboard_(computing)" class="mw-redirect" title="Keyboard (computing)">keyboard</a> to a <a href="Computer" title="Computer">computer</a>. Its main function is to inform the computer when a <a href="Computer_keyboard_keys" class="mw-redirect" title="Computer keyboard keys">key</a> is pressed or released. When data from the keyboard arrives, the controller raises an <a href="Interrupt" title="Interrupt">interrupt</a> (a <i>keyboard interrupt</i>) to allow the <a href="CPU" class="mw-redirect" title="CPU">CPU</a> to handle the input.
</p><p>If a keyboard is a separate <a href="Computer_peripheral" class="mw-redirect" title="Computer peripheral">peripheral</a> <a href="System_unit" class="mw-redirect" title="System unit">system unit</a> (such as in most modern <a href="Desktop_computer" title="Desktop computer">desktop computers</a>), the keyboard controller is not directly attached to the keys, but receives <a href="Scancode" title="Scancode">scancodes</a> from a <a href="Microcontroller" title="Microcontroller">microcontroller</a> embedded in the keyboard via some kind of <a href="Serial_interface" class="mw-redirect" title="Serial interface">serial interface</a>. In this case, the controller usually also controls the keyboard's <a href="LED" class="mw-redirect" title="LED">LEDs</a> by sending data back to keyboard through the wire.
</p><p>The <a href="IBM_PC_AT" class="mw-redirect" title="IBM PC AT">IBM PC AT</a> used an <a href="Intel_8042" class="mw-redirect" title="Intel 8042">Intel 8042</a> chip to interface to the keyboard. This chip had two additional functions: it controlled access to the <a href="Intel_80286" title="Intel 80286">Intel 80286</a> CPU's <a href="A20_line" title="A20 line">A20 line</a> in order to implement a workaround for a chip bug, and it was used to initiate a software CPU reset in order to allow the CPU to transition from <a href="Protected_mode" title="Protected mode">protected mode</a> to <a href="Real_mode" title="Real mode">real mode</a> because the 286 did not allow the CPU to go from protected mode to real mode unless the CPU is reset.<sup id="cite_ref-painFromThePast_1-0" class="reference"><a href="#cite_note-painFromThePast-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> The latter was a problem because the BIOS and services provided by real mode operating systems such as MS-DOS and similar operating systems could only be called by programs in real mode. These behaviors have been used by plenty of software that expects this behavior, and therefore keyboard controllers have continued controlling the A20 line and performing software CPU resets even when the need for a reset via the keyboard controller was obviated by the <a href="Intel_80386" class="mw-redirect" title="Intel 80386">Intel 80386</a>'s ability to switch to real mode from protected mode without a CPU reset. The keyboard controller also handles <a href="PS/2_port" title="PS/2 port">PS/2</a> <a href="Mouse_(computing)" class="mw-redirect" title="Mouse (computing)">mouse</a> input if a PS/2 mouse port is present.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Modern_interface">Modern interface</h2></div>
<p>Today the keyboard controller is either a unit inside a <a href="Super_I/O" title="Super I/O">Super I/O</a> device or is missing, having its keyboard and mouse functions handled by a USB controller and its role in controlling the A20 line becoming integrated into the chipset's <a href="Northbridge_(computing)" title="Northbridge (computing)">northbridge</a> and then later into the CPU's built-in integrated memory controller.
</p>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="Keyboard_buffer" title="Keyboard buffer">Keyboard buffer</a></li>
<li><a href="AT_keyboard" class="mw-redirect" title="AT keyboard">AT keyboard</a></li>
<li><a href="KVM_extender" class="mw-redirect" title="KVM extender">KVM extender</a></li>
<li><a href="Embedded_controller" title="Embedded controller">Embedded controller</a>: The Intel 8042 and other keyboard controllers used in computers based on the IBM PC/AT design can be considered embedded controllers.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-painFromThePast-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-painFromThePast_1-0">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */


.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}


/* end https://en.wikipedia.org/ */
</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.win.tue.nl/~aeb/linux/kbd/A20.html">"A20 - a pain from the past"</a>.</cite></span>
</li>
</ol></div>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li><a rel="nofollow" class="external text" href="http://www.datasheetcatalog.org/datasheet/StandardMicrosystems/mXsstsv.pdf">KBD43W13 Keyboard and PS/2 Mouse Controller</a></li></ul>
<style data-mw-deduplicate="TemplateStyles:r1271159938">
/* start https://en.wikipedia.org/ */


.mw-parser-output .asbox{position:relative;overflow:hidden}.mw-parser-output .asbox table{background:transparent}.mw-parser-output .asbox p{margin:0}.mw-parser-output .asbox p+p{margin-top:0.25em}.mw-parser-output .asbox-body{font-style:italic}.mw-parser-output .asbox-note{font-size:smaller}.mw-parser-output .asbox .navbar{position:absolute;top:-0.75em;right:1em;display:none}.mw-parser-output :not(p):not(.asbox)+style+.asbox,.mw-parser-output :not(p):not(.asbox)+link+.asbox{margin-top:3em}


/* end https://en.wikipedia.org/ */
</style></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-04-18" href="https://en.wikipedia.org/wiki/?title=Keyboard_controller_(computing)&amp;oldid=1286175050">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>